const fs = require("fs");
const path = require("path");
const axios = require("axios");
// 生成游客uuid 用于生成唯一的key
function getUseUuid() {
  return "xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, (c) => {
    const r = (Math.random() * 16) | 0;
    const v = c === "x" ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}

// 生成1-9随机数
function generateRandomNumber() {
  return Math.floor(Math.random() * 9) + 1;
}

// 替换对应位置字符，默认第5位
function replaceLastFifthChar(str, newNum, num = 27) {
  // 使用slice()方法分割字符串，并用新字符替换指定位置的字符
  return str.slice(0, num) + newNum + str.slice(num + 1);
}

function strRandomHandle(str = "") {
  let numValue = generateRandomNumber();
  let newStr = replaceLastFifthChar(str, numValue, 27);
  newStr = replaceLastFifthChar(newStr, newStr[28], numValue - 1);
  return newStr;
}

function convertImagesToBase64(imagePaths, path1 = "images") {
  let obj = {};
  imagePaths.map((imagePath) => {
    const fullPath = path.join(__dirname, path1, imagePath);
    const imageBuffer = fs.readFileSync(fullPath);
    const base64Image = imageBuffer.toString("base64");
    obj[imagePath] = `data:image/png;base64,${base64Image}`;
    return `data:image/png;base64,${base64Image}`; // 根据图片类型调整 `image/png`
  });
  // console.log('obj--',obj);
  return obj;
}





/**
 * 下载并保存图片到指定目录，文件名为时间戳
 * @param {string} imageUrl - 图片的网络地址
 * @param {string} targetDir - 保存图片的目标目录
 */
// const targetDir = path.join(__dirname, 'images'); // 设置目标目录
async function saveImage(imageUrl, targetDir = path.join(__dirname, 'testImage')) {
  
  const timestamp = Date.now(); // 获取当前时间戳
  const fileExtension = path.extname(imageUrl) || '.jpg'; // 获取文件扩展名，默认为 .jpg
  const localPath = path.join(targetDir, `${timestamp}${fileExtension}`); // 使用时间戳命名文件

  try {
      const response = await axios({
          method: 'get',
          url: imageUrl,
          responseType: 'stream' // 以流的形式获取数据
      });

      // 创建图片保存目录（如果不存在）
      fs.mkdirSync(targetDir, { recursive: true });

      // 将获取到的图片数据流写入到本地文件
      response.data.pipe(fs.createWriteStream(localPath));

      // 监听写入完成事件
      response.data.on('end', () => {
          console.log(`Image saved successfully as ${timestamp}${fileExtension}!`);
      });

      // 处理错误
      response.data.on('error', (err) => {
          console.error('Error saving image:', err);
      });
  } catch (error) {
      console.error('Error fetching image:', error);
  }
}

// 示例用法
// const imageUrl = 'https://example.com/image.jpg'; // 替换为你要获取的图片 URL
// const targetDir = path.join(__dirname, 'images'); // 设置目标目录
// saveImage(imageUrl, targetDir);

module.exports = {
  getUseUuid,
  strRandomHandle,
  convertImagesToBase64,
  saveImage
};
